﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;
using skhukb.DB;
using skhukb.BL;
using skhukb.Models;

namespace skhukb.Controllers
{
    [Authorize]
    public class BbsFileController : Controller
    {
        [HttpGet]
        public ActionResult Upload(long articleId)
        {
            return View("UploadForm", articleId);
        }

        [HttpPost]
        public ActionResult Upload(HttpPostedFileBase filedata, long articleId)
        {
            System.Threading.Thread.Sleep(1000);
            using (var db = new DBDataContext()) {
                try {
                    var 파일크기제한 = 10;
                    int.TryParse(System.Configuration.ConfigurationManager.AppSettings["FileUploadSizeMax"], out 파일크기제한);

                    string 파일명 = Path.GetFileName(filedata.FileName);
                    var 크기 = (int)filedata.InputStream.Length;
                    if (크기 >= 파일크기제한 * 1024 * 1024) {
                        ViewBag.Message = Consts.파일크기오류;
                        return View("UploadForm", articleId);
                    }

                    var 버퍼 = new byte[크기];
                    filedata.InputStream.Read(버퍼, 0, 크기);

                    var 새파일 = new 게시글첨부파일 { 크기 = 크기, 파일명 = 파일명, 내용 = 버퍼, 게시글ID = articleId };
                    db.게시글첨부파일.InsertOnSubmit(새파일);
                    db.SubmitChanges();
                    return View("UploadComplete", articleId);
                } catch (Exception ex) {
                    ViewBag.Message = ex.Message;
                    return View("UploadForm", articleId);
                }
            }
        }

        [HttpGet]
        public ActionResult List(long articleId)
        {
            using (var db = new DBDataContext()) {
                var 목록 = db.게시글첨부파일.Where(p => p.게시글ID == articleId).Select(p => new 게시글첨부파일Model(p)).ToList();
                return PartialView("_List", new BbsFileListModel { 목록 = 목록 });
            }
        }

        [HttpGet]
        public ActionResult Download(long id)
        {
            using (var db = new DBDataContext()) {
                var 파일 = db.게시글첨부파일.FirstOrDefault(p => p.ID == id);
                if (파일 == null) return new HttpNotFoundResult();
                return File(파일.내용.ToArray(), "application/octet-stream", 파일.파일명);
            }
        }

        [skhukb.Util.AjaxOnly]
        [HttpPost]
        public ActionResult Delete(long id)
        {
            using (var db = new DBDataContext()) {
                var 파일 = db.게시글첨부파일.FirstOrDefault(p => p.ID == id);
                if (파일 == null) return Json(new JsonModel { success = false, message = Consts.작업실패 });
                if (파일.게시글.작성자ID != 현재사용자.사용자.ID) return Json(new JsonModel { success = false, message = Consts.권한없음 });


                db.게시글첨부파일.DeleteOnSubmit(파일);
                db.SubmitChanges();
                return Json(new JsonModel { success = true });
            }
        }

    }
}
